/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.sistema.aplicacao;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import com.sistema.db.*;
import com.sistema.tools.Data;
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

/**
 *
 * @author geraldo
 */
public class DialogAdminClientes extends JDialog
{

    private JPanel pnlPrincipal;
    private JButton btnCadastro;
    private JButton btnEditar;
    private JButton btnExcluir;
    private static JTable tblClientes;
    private static DefaultTableModel modeloTabela = new DefaultTableModel();
    private JScrollPane scroller;
    private JLabel jlbTitulo;
    private static boolean controle = false;

    public DialogAdminClientes()
    {

        setDefaultCloseOperation( DISPOSE_ON_CLOSE );
        setTitle( "Controle de Ligações Suporte" );
        setSize( 800, 700 );
        setLayout( null );
        setLocationRelativeTo( null );
        iniciaComponentes();
        actions();
        setModal( true );
        setVisible( true );


    }

    public void iniciaComponentes()
    {

        pnlPrincipal = new JPanel();
        pnlPrincipal.setLayout( null );
        pnlPrincipal.add( jlbTitulo = new JLabel( "Cadastro de Clientes" ) ).setBounds( 300, 20, 400, 60 );
        Font font_titulo = new Font( "Arial", Font.BOLD, 18 );
        jlbTitulo.setFont( font_titulo );

        pnlPrincipal.add( btnCadastro = new JButton( "Cadastrar Cliente" ) ).setBounds( 80, 100, 200, 40 );
        pnlPrincipal.add( btnEditar = new JButton( "Editar Cliente" ) ).setBounds( 300, 100, 200, 40 );
        pnlPrincipal.add( btnExcluir = new JButton( "Excluir Cliente" ) ).setBounds( 520, 100, 200, 40 );

        ImageIcon img_cadastro = new ImageIcon( ( getClass().getResource( "/img/img_cadastro.png" ) ) );
        ImageIcon img_editar = new ImageIcon( ( getClass().getResource( "/img/img_editar.png" ) ) );
        ImageIcon img_excluir = new ImageIcon( ( getClass().getResource( "/img/img_excluir.png" ) ) );

        btnCadastro.setIcon( img_cadastro );
        btnEditar.setIcon( img_editar );
        btnExcluir.setIcon( img_excluir );

        tblClientes = new JTable( modeloTabela )
        {

            public boolean isCellEditable( int rowIndex, int vColIndex )
            {
                return false;
            }
        };

        tblClientes.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );

        scroller = new JScrollPane( tblClientes );
        pnlPrincipal.add( scroller ).setBounds( 80, 180, 640, 420 );


        tabelaClientes();

        add( pnlPrincipal ).setBounds( 1, 1, 800, 600 );

    }

    public void tabelaClientes()
    {

        if ( controle == false )
        {
            controle = true;


            modeloTabela.addColumn( "Nome" );
            modeloTabela.addColumn( "Status" );
            modeloTabela.addColumn( "Data Registro" );

            Banco conn = new Banco();
            ResultSet rs = conn.executarConsulta( "SELECT a.descricao as clientes, "
                    + "       b.descricao as status, a.dt_registro "
                    + "FROM clientes a "
                    + "INNER JOIN status_cliente b "
                    + "ON (a.ref_status = b.id) ORDER BY a.descricao" );
            conn.fecha();

            try
            {
                Data dt = new Data();

                while ( rs.next() )
                {

                    modeloTabela.addRow( new Object[]
                            {
                                rs.getString( "clientes" ),
                                rs.getString( "status" ),
                                dt.inverteAplicacao( rs.getString( "dt_registro" ) )
                            } );
                }

                personalizaTabela();

            } catch ( Exception e )
            {
                e.printStackTrace();
            }
        } else
        {
            atualizaTela();
        }
    }

    public static void personalizaTabela()
    {
        DefaultTableCellRenderer centralizado = new DefaultTableCellRenderer();
        centralizado.setHorizontalAlignment( SwingConstants.CENTER );

        //Tamanho colunas
        tblClientes.getColumnModel().getColumn( 0 ).setPreferredWidth( 300 );
        tblClientes.getColumnModel().getColumn( 1 ).setPreferredWidth( 20 );
        tblClientes.getColumnModel().getColumn( 2 ).setPreferredWidth( 20 );

//        // Instala o TableRowSorter.
//        TableRowSorter<TableModel> sorter;
//        sorter = new TableRowSorter<TableModel>( modeloTabela );
//        tblClientes.setRowSorter( sorter );

        // Centraliza valores tabela
        for ( int x = 1; x < modeloTabela.getColumnCount(); x++ )
        {
            tblClientes.getColumnModel().getColumn( x ).setCellRenderer( centralizado );
        }
    }

    public int verificaCliente( int id )
    {
        Banco conn = new Banco();
        ResultSet rs = conn.executarConsulta( "SELECT count(*) as qtde FROM ligacoes WHERE ref_cliente = " + id + "" );
        conn.fecha();
        int qtde = 0;

        try
        {
            while ( rs.next() )
            {
                qtde = rs.getInt( "qtde" );
            }

        } catch ( Exception e )
        {
            e.printStackTrace();
        }

        return qtde;
    }

    public void actions()
    {

        btnEditar.addActionListener( new ActionListener()
        {

            public void actionPerformed( ActionEvent ae )
            {

                FormPrincipal.verificaSessao();
                FormPrincipal.verificaTipoUsuario();


                String descricao = "";
                int status = 0;




                int linha = tblClientes.getSelectedRow();

                if ( linha != -1 )
                {

                    Object valor = modeloTabela.getValueAt( linha, 0 );



                    Banco conn = new Banco();

                    try
                    {

                        ResultSet rs = conn.executarConsulta( "SELECT descricao,ref_status as status FROM clientes WHERE descricao = '" + valor + "'" );

                        while ( rs.next() )
                        {
                            descricao = rs.getString( "descricao" );
                            status = rs.getInt( "status" );
                        }

                    } catch ( Exception f )
                    {
                    }

                    conn.fecha();

                    new FormCliente( descricao, status );

                } else
                {
                    JOptionPane.showMessageDialog( null, "Selecione um cliente", "Mensagem", JOptionPane.INFORMATION_MESSAGE );
                }
            }
        } );

        btnCadastro.addActionListener( new ActionListener()
        {

            public void actionPerformed( ActionEvent ae )
            {
                FormPrincipal.verificaSessao();
                FormPrincipal.verificaTipoUsuario();

                new FormCliente();
            }
        } );

        tblClientes.addMouseListener( new MouseListener()
                {

                    public void mouseClicked( MouseEvent e )
                    {
                        FormPrincipal.verificaSessao();

                        if ( e.getClickCount() > 1 )
                        {
                            int id = 0;
                            String descricao = "";
                            int status = 0;

                            int linha = tblClientes.getSelectedRow();
                            Object valor = modeloTabela.getValueAt( linha, 0 );



                            Banco conn = new Banco();

                            try
                            {

                                ResultSet rs = conn.executarConsulta( "SELECT descricao, ref_status as status FROM clientes WHERE descricao = '" + valor + "'" );

                                while ( rs.next() )
                                {
                                    descricao = rs.getString( "descricao" );
                                    status = rs.getInt( "status" );
                                }

                            } catch ( Exception f )
                            {
                                f.printStackTrace();
                            }

                            conn.fecha();
                            new FormCliente( descricao, status );
                        }
                    }

                    public void mouseEntered( MouseEvent e )
                    {
                        FormPrincipal.verificaSessao();
                        FormPrincipal.verificaTipoUsuario();
                    }

                    public void mouseExited( MouseEvent e )
                    {
                        FormPrincipal.verificaSessao();
                        FormPrincipal.verificaTipoUsuario();
                    }

                    public void mousePressed( MouseEvent e )
                    {
                        FormPrincipal.verificaSessao();
                        FormPrincipal.verificaTipoUsuario();
                    }

                    public void mouseReleased( MouseEvent e )
                    {
                        FormPrincipal.verificaSessao();
                        FormPrincipal.verificaTipoUsuario();
                    }
                } );


        btnExcluir.addActionListener( new ActionListener()
        {

            public void actionPerformed( ActionEvent ae )
            {

                FormPrincipal.verificaSessao();
                FormPrincipal.verificaTipoUsuario();


                int linha = tblClientes.getSelectedRow();
                int id = 0;



                if ( linha != -1 )
                {
                    Object descricao = tblClientes.getValueAt( linha, 0 );

                    String[] s = new String[]
                    {
                        "Sim", "Não"
                    };

                    int msg = JOptionPane.showOptionDialog( null, "Você tem certeza que deseja remover esse cliente?", "Mensagem", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, s, "Ok" );


                    switch ( msg )
                    {
                        case ( JOptionPane.YES_OPTION ):
                        {
                            Banco conn = new Banco();
                            ResultSet rs = conn.executarConsulta( "SELECT id FROM clientes WHERE descricao = '" + descricao + "'" );

                            try
                            {
                                while ( rs.next() )
                                {
                                    id = rs.getInt( "id" );

                                    if ( verificaCliente( id ) == 0 )
                                    {
                                        conn.executarAtualizacao( "DELETE FROM clientes WHERE id = " + id + "" );
                                        JOptionPane.showMessageDialog( null, "Cliente excluído com sucesso!" );
                                    } else
                                    {
                                        JOptionPane.showMessageDialog( null, "Não é possível excluir clientes  que  \n"
                                                + "possuem registros no sistema, altere \n"
                                                + "seu status para DESATIVADO.", "Mensagem", JOptionPane.WARNING_MESSAGE );
                                    }
                                }

                            } catch ( Exception e )
                            {
                                e.printStackTrace();
                            }

                            conn.fecha();
                        }
                        ;

                        case ( JOptionPane.NO_OPTION ):
                        {
                        }
                        ;

                        case ( JOptionPane.DEFAULT_OPTION ):
                        {
                        }
                        ;

                    }
                } else
                {
                    JOptionPane.showMessageDialog( null, "Selecione um cliente", "Mensagem", JOptionPane.INFORMATION_MESSAGE );
                }

                atualizaTela();


            }
        } );

    }

    public static void atualizaTela()
    {

        int numLinhas = modeloTabela.getRowCount();


        for ( int x = numLinhas; x > 0; x-- )
        {
            modeloTabela.removeRow( 0 );
        }


        Banco conn = new Banco();
        ResultSet rs = conn.executarConsulta( "SELECT a.descricao as clientes, "
                + "       b.descricao as status, a.dt_registro "
                + "FROM clientes a "
                + "INNER JOIN status_cliente b "
                + "ON (a.ref_status = b.id) ORDER BY a.descricao" );

        conn.fecha();

        try
        {
            Data dt = new Data();

            while ( rs.next() )
            {

                modeloTabela.addRow( new Object[]
                        {
                            rs.getString( "clientes" ),
                            rs.getString( "status" ),
                            dt.inverteAplicacao( rs.getString( "dt_registro" ) )
                        } );
            }

            personalizaTabela();

        } catch ( Exception e )
        {
            e.printStackTrace();
        }


    }
}
